let loaderUtils = require('loader-utils');
let { validate } = require('schema-utils');

let fs = require('fs')
const schema = {
  type: 'object',
  properties: {
    text: {
      type: 'string'
    },
    filename: {
      type: 'string'
    }
  }
}

function loader(source){
  // 使用缓存，默认开启缓存的
  this.cached && this.cached()
  // 获取配置中的options
  let options = loaderUtils.getOptions(this)
  // 效验配置中的options是否符合规则
  validate(schema,options,'banner-loader')
  // 异步，需要获取回调函数通知完成和传递数据
  const cb = this.async();
  if(options.filename){
    // 对该文件进行watch，修改该文件会触发编译
    this.addDependency(options.filename)
    fs.readFile(options.filename, 'utf8', function(err,data){
      cb(err, `/**${data}*/${source}`)
    })
  }else{
    cb(null, `/**${options.text}*/${source}`)
  }
}

module.exports = loader